/*
Automatic clinic tests using a robot arm.
Copyright (C) 2010  CIC-CPC, CHU Gabriel Montpied
All other trademarks, logos and copyrights are the property
of their respective owners.

This file is part of cpc-painbot.

cpc-painbot is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

cpc-painbot is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with cpc-painbot.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef REPONSE_H
#define REPONSE_H
#include "commande/commande.h"

#include <QRegExp>
#include <QMetaType>

namespace commande {
namespace indproc {

/*! Réponse émise par l'indicateur de process.
    Une réponse est au format suivant :
    \<ESPACE\>...\<CR\>
    où ... représente la valeur de la réponse.
*/
class ReponseIndicateur : public Commande
{
public:
    //! Format de la commande.
    static const QRegExp format;

    //! Type des réponses.
    enum Type {
        ValeurMin,   //!< Valeur maximale.
        ValeurMax,   //!< Valeur minimale.
        ValeurTare,  //!< Valeur de la tare.
        ValeurMesure //!< Valeur de la mesure.
    };

    /*! Lit une réponse.
        Lit et génère une réponse.
        \param[in] type   Le type de la réponse.
        \param[in] serial Une réponse sérialisée.

        \retval Une réponse si elle existe
        \retval 0 si le serial est incorrect.
    */
    static ReponseIndicateur * lire(const QString &serial);

    /*! Constructeur.
        Construit la réponse à l'aide du type et de la valeur associée.

        \param[in] type   Type de la réponse
        \param[in] valeur Valeur associée.
    */
    ReponseIndicateur(qreal valeur, Type type = ValeurMesure);

    Type type() const { return type_; }
    void setType(Type type) { type_ = type; }
    qreal valeur() const { return valeur_; }

    virtual QString generer(void) const;
protected:
    Type type_;
    qreal valeur_;
};

} // namespace indproc
} // namespace commande

Q_DECLARE_METATYPE(commande::indproc::ReponseIndicateur*)

#endif // REPONSE_H
